package com.qt.file;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @Author zsf
 * @Date 2023/9/20 23:34
 * @Version 1.0
 */
public class IoDemoTest {

    public static void main(String[] args) throws IOException {

        //extracted();

        //extracted1();

        //extracted2("D:\\java测试目录");

        /**
         * 删除一个多级文件夹
         */

        //extracted3("D:\\java测试目录\\ddd");

        //extracted5();







    }

    private static void extracted5() {
        /**
         * File类相关的API的练习题
         * 需求;
         * 统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)打印格式如下:
         */
        HashMap<String, Integer> result = new HashMap<>();
        extracted4("D:\\java测试目录\\ddd",result);
        Set<Map.Entry<String, Integer>> entries = result.entrySet();
        entries.forEach(s -> System.out.println(s.getKey() + ":" + s.getValue() + "个"));
    }

    private static void extracted4(String str, HashMap result) {
        File file = new File(str);
        File[] files = file.listFiles();
        for (File fileItem : files) {
            if(fileItem.isFile()){
                putMap(fileItem,result);
                continue;
            }
            if(fileItem.isDirectory() &&  fileItem.listFiles().length > 0){
                extracted4(fileItem.getAbsolutePath(),result);
            }
        }
    }

    public static void putMap(File fileItem,Map result){
        String[] split = fileItem.getName().split("\\.");
        //String key = fileItem.getName().substring(fileItem.getName().indexOf("."));
        String key = "";
        if(split.length > 1){
            key = split[split.length - 1];
        }


        if(result.containsKey(key )){
            result.put(key ,Integer.parseInt( result.get(key ).toString()) + 1);
        }else {
            result.put(key ,1);
        }
    }


    /**
     * 删除一个多级文件夹
     * @param str
     */

    private static void extracted3(String str) {
        File file = new File(str);
        File[] files = file.listFiles();
        for (File fileItem : files) {
            if(fileItem.isFile()){
                fileItem.delete();
                continue;
            }
            if(fileItem.isDirectory() &&  fileItem.listFiles().length == 0){
                fileItem.delete();
                continue;
            }else {
                extracted3(fileItem.getAbsolutePath());
                fileItem.delete();
            }
        }
    }

    private static void extracted2(String str) {

        /**
         * 需求:
         * 找到电脑中所有以avi结尾的电影。
         * 起虑子文件夹)
         */
        File file = new File(str);
        if(file.exists()){
            File[] files = file.listFiles();
            for (File fileItem : files) {

                if(fileItem.isDirectory()){
                    extracted2(fileItem.getAbsolutePath());
                }
                if(fileItem.isFile() && fileItem.getName().endsWith(".avi")){
                    System.out.println(fileItem.getAbsolutePath());
                }
            }
        }
    }


    private static void extracted1() {
        /**
         * 需求:
         * 定义一个方法找某一个文件夹中，是否有以avi结尾的电影。(暂时不需要考虑子文件夹)
         * D:\\aaa
         */
        String str = "D:\\java测试目录";

        File file = new File(str);
        if(file.exists()){
            File[] files = file.listFiles();
            for (File fileItem : files) {
                if(fileItem.getName().endsWith(".avi")){
                    System.out.println(fileItem.getAbsolutePath());
                }
            }
        }
    }

    private static void extracted() throws IOException {
        /**
         * 需求:
         * 在当前模块下的aaa文件夹中创建一个a.txt文件
         *
         * 注意 当前代码是在项目下，所以会多一级目录
         *
         */
        String parentStr = "aaa";
        String childStr = "a.txt";
        File file = new File(parentStr);
        if(!file.exists()){
            file.mkdirs();
        }
        File childFile = new File(file,childStr);
        childFile.createNewFile();
    }

}
